/**
 * 时间格式化 YYYY-MM-DD HH:mm:ss
 *
 * @param dateStr
 * @returns {string}
 */
export function formatDate(dateStr) {
    if (!dateStr) return null;

    // 尝试解析日期字符串
    const date = new Date(dateStr);
    if (isNaN(date.getTime()))  return null; // 如果日期无效，返回 null

    // 格式化年、月、日
    const year = date.getFullYear();
    const month = String(date.getMonth()  + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2,  '0');

    // 格式化时、分、秒
    const hours = String(date.getHours()).padStart(2,  '0');
    const minutes = String(date.getMinutes()).padStart(2,  '0');
    const seconds = String(date.getSeconds()).padStart(2,  '0');

    // 返回完整的日期时间字符串
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

/**
 * @param {Function} fn 防抖函数
 * @param {Number} delay 延迟时间
 */
export function debounce(fn, delay) {
    var timer;
    return function () {
        var context = this;
        var args = arguments;
        clearTimeout(timer);
        timer = setTimeout(function () {
            fn.apply(context, args);
        }, delay);
    };
}

/**
 * @param {date} time 需要转换的时间
 * @param {String} fmt 需要转换的格式 如 yyyy-MM-dd、yyyy-MM-dd HH:mm:ss
 */
export function formatTime(time, fmt) {
    if (!time) return '';//没传时间返回空
    else {
        const date = new Date(time);
        const o = {
            'M+': date.getMonth() + 1,//月
            'd+': date.getDate(),//日
            'H+': date.getHours(),//时
            'm+': date.getMinutes(),//分
            's+': date.getSeconds(),//秒
            'q+': Math.floor((date.getMonth() + 3) / 3),//月+3/3
            S: date.getMilliseconds(),//返回时间的毫秒
        };
        if (/(y+)/.test(fmt))//匹配1个到多个y
            //这一步把年转换完毕
            fmt = fmt.replace(
                RegExp.$1,//拿到y+匹配到的第一个分组
                (date.getFullYear() + '').substr(4 - RegExp.$1.length)
            );
        //这一步把生下的格式继续匹配转换
        for (const k in o) {
            if (new RegExp('(' + k + ')').test(fmt)) {
                fmt = fmt.replace(
                    RegExp.$1,
                    RegExp.$1.length === 1
                        ? o[k]
                        : ('00' + o[k]).substr(('' + o[k]).length)
                );
            }
        }
        return fmt;
    }
}